/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Toepen.SpelFacade;

import Toepen.LoungeFacade.ILoungeFacade;
import Toepen.LoungeFacade.LoungeSpel;
import java.net.InetAddress;
/**
 * Static functie waarmee spelfacades aangemaakt worden
 * @author Bart Piggen
 */
public class SpelFacadeFactory {
    /**
     * Creeert een instantie van ISpelFacade
     * @param spel het spel van de lounge waarop deze observable gebouwd wordt
     * @param lounge een referentie terug naar de lounge
     * @return Een remote spel
     */
    public static ISpelFacade Create(LoungeSpel spel, ILoungeFacade lounge)
    {
        ISpelFacade retVal=null;
        try
        {
            //TODO: this is where we implement the rmi lookup/register of the ISpelFacade
            // get the ipaddress of this machine to see if we need to do a rmi register or a rmi lookup
            InetAddress thisIp = InetAddress.getLocalHost();

            if(spel.getHost().equals(thisIp.getHostAddress()))
            {
                try
                {
                    // TODO: deal with tcp/ip port thyat can be in use
                    java.rmi.registry.LocateRegistry.createRegistry(2085);
                    retVal=new SpelFacade(spel, lounge);
                    java.rmi.Naming.rebind("rmi://" + spel.getHost() + ":2085/spel", retVal);
                }
                catch(Exception e)
                {
                    retVal = (ISpelFacade) java.rmi.Naming.lookup("rmi://" + spel.getHost() + ":2085/spel");
                }
            }
            else
            {
                retVal = (ISpelFacade) java.rmi.Naming.lookup("rmi://" + spel.getHost() + ":2085/spel");
            }
        }
        catch (Exception e)
        {
	        e.printStackTrace();
        }
        return(retVal);
    }
}
